package com.chenziwen.scala.chapter05

import scala.beans.BeanProperty

object Scala04_Attribute {
  def main(args: Array[String]): Unit = {
    val dept = new Dept("bob")
    // 此时这种Dept主构造器中的name（未加任何修饰符）属性是一个局部变量，无法通过对象进行访问，编译都无法通过
    //println(dept.name)

    val manager = new Manager("manager")
    // 使用val关键字声明，那么Scala会将参数作为类的只读属性（不能修改）使用
    println(manager.name)


    // 使用val关键字声明，那么Scala会将参数作为类的成员属性使用，并会提供属性对应的setter/getter方法
    val admin = new Admin("admin")
    admin.name = "update admin"
    println(admin.name)

    admin.setAge(10)
    println(admin.getAge)
  }
}

class Dept(name: String) {

}

class Manager(val name: String) {

}

class Admin(var name: String) {
  // JavaBean规范定义了Java属性的get/set方法，许多Java框架会依赖这个命名规则，为了与Java互操作性
  // Scala字段加@Beanproperty时，这样会自动生成setter/getter方法
  @BeanProperty var age: Int = _
}
